Skipgram
从输入语句中生成skip-gram。skip-gram是从句子中提取的词语序列,其中相邻词语之间的距离(跳过的词语数量)不超过指定的最大值。此算子主要用于自然语言处理(NLP)任务。
- 输入:
sentence - StringPack* 类型,指向输入语句的指针。
words - StringPack* 类型,用于存储从语句中解析出的词语的工作空间。
ngram_size - int 类型,指定每个n-gram中的词语数量。
max_skip_size - int 类型,指定在构成n-gram时可以跳过的最大词语数量。
include_all_ngrams - int 类型,布尔标志。如果为非零,则生成长度从1到 ngram_size 的所有n-gram;否则,仅生成长度为 ngram_size 的n-gram。
grams - StringPack** 类型,用于存储生成的gram的工作空间。
grams_word_count - int* 类型,用于存储每个gram中词语数量的工作空间。
stack - int* 类型,长度为 ngram_size 的临时工作空间。
blank - char* 类型,指向空格字符的指针,用于连接gram中的词语。
output_tensor - char* 类型,最终输出张量的数据地址。
offset - int* 类型,输出参数,用于存储 output_tensor 中每个gram的偏移量。
len - int* 类型,输出参数,用于存储 output_tensor 中每个gram的长度。
shape - int* 类型,输出参数,用于存储输出张量的维度信息。
core_mask - (仅限共享版本) 核掩码。
- 输出:
output_tensor、offset、len 和 shape - 这些指针指向的内存区域将被填充,以表示包含生成结果的最终张量。
- 支持平台:
FT78NEMT7004
备注
该算子不区分数据类型,直接操作字符数据。
共享存储版本:
-
int skipgram_s(StringPack *sentence, StringPack *words, int ngram_size, int max_skip_size, int include_all_ngrams, StringPack **grams, int *grams_word_count, int *stack, char *blank, char *output_tensor, int *offset, int *len, int *shape, int core_mask)
C调用示例:
1#include <stdio.h>
2#include "skipgram.h" // 假设头文件名
3
4typedef struct StringPack {
5 long long len;
6 char *data;
7} StringPack;
8
9int main(int argc, char* argv[]) {
10 // 假设输入和工作空间已在DDR中分配
11 StringPack* sentence = (StringPack*)0xA0000000;
12 StringPack* words = (StringPack*)0xA0010000;
13 StringPack** grams = (StringPack**)0xA0020000;
14 int* grams_word_count = (int*)0xA0030000;
15 int* stack = (int*)0xA0040000;
16 char* output_tensor = (char*)0xB0000000;
17 int* offset = (int*)0xB0010000;
18 int* len = (int*)0xB0020000;
19 int* shape = (int*)0xB0030000;
20 char blank_char = ' ';
21
22 // 填充sentence内容
23 sentence->data = "mindspore signal processing library";
24 sentence->len = 33;
25
26 int ngram_size = 2;
27 int max_skip_size = 1;
28 int include_all_ngrams = 1;
29 int core_mask = 0xff;
30
31 skipgram_s(sentence, words, ngram_size, max_skip_size, include_all_ngrams,
32 grams, grams_word_count, stack, &blank_char,
33 output_tensor, offset, len, shape, core_mask);
34 return 0;
35}
私有存储版本:
-
int skipgram_p(StringPack *sentence, StringPack *words, int ngram_size, int max_skip_size, int include_all_ngrams, StringPack **grams, int *grams_word_count, int *stack, char *blank, char *output_tensor, int *offset, int *len, int *shape)
C调用示例:
1#include <stdio.h>
2#include "skipgram.h" // 假设头文件名
3
4typedef struct StringPack {
5 long long len;
6 char *data;
7} StringPack;
8
9int main(int argc, char* argv[]) {
10 // 假设输入和工作空间已在私有内存中分配
11 StringPack* sentence = (StringPack*)0x10001000;
12 StringPack* words = (StringPack*)0x10002000;
13 StringPack** grams = (StringPack**)0x10003000;
14 int* grams_word_count = (int*)0x10004000;
15 int* stack = (int*)0x10005000;
16 char* output_tensor = (char*)0x10006000;
17 int* offset = (int*)0x10007000;
18 int* len = (int*)0x10008000;
19 int* shape = (int*)0x10009000;
20 char blank_char = ' ';
21
22 // 填充sentence内容
23 sentence->data = "mindspore signal processing library";
24 sentence->len = 33;
25
26 int ngram_size = 2;
27 int max_skip_size = 1;
28 int include_all_ngrams = 1;
29
30 skipgram_p(sentence, words, ngram_size, max_skip_size, include_all_ngrams,
31 grams, grams_word_count, stack, &blank_char,
32 output_tensor, offset, len, shape);
33 return 0;
34}